/*
 * @Author: laladuduqq
 * @Date: 2024-12-17 17:26:47
 * @LastEditors: laladuduqq
 * @LastEditTime: 2024-12-17 18:53:54
 */
#ifndef __BMI088_H
#define __BMI088_H
#include "rttypes.h"
#include <math.h>
#ifdef __cplusplus
extern "C"{
#endif

#include "rtdef.h"
#include "BMI088_reg.h"
#include <stdbool.h>
#include "controller.h"


#define GxOFFSET -0.00601393497f
#define GyOFFSET -0.00196841615f
#define GzOFFSET 0.00114696583f
#define gNORM 9.67463112f


/* BMI088数据*/
typedef struct
{
    float gyro[3];     // 陀螺仪数据,xyz
    float acc[3];      // 加速度计数据,xyz
    float temperature; // 温度
    float TempWhenCali; //标定时温度
    rt_uint32_t BMI088_ERORR_CODE;
    PIDInstance imu_temp_pid;
    // 标定数据
    float AccelScale;
    float GyroOffset[3];
    float gNorm;          // 重力加速度模长,从标定获取

    rt_uint8_t cali_mode;  //标定
    float BMI088_GYRO_SEN;

} BMI088_Data_t;


extern BMI088_Data_t BMI088_Data;
extern  rt_sem_t acc_int_sem;
extern  rt_sem_t gyro_int_sem;              /* 指向信号量的指针 */
extern struct rt_device_pwm *imu_temp_pwm_dev;      /* PWM设备句柄 */


void BMI088_data_acquire(BMI088_Data_t *BMI088_Data);
void bmi088_get_accel(BMI088_Data_t *BMI088_Data);
void bmi088_get_gyro(BMI088_Data_t *BMI088_Data);

void Calibrate_MPU_Offset(BMI088_Data_t *bmi088);

int BMI088_init(void);

#ifdef __cplusplus
}
#endif

#endif // BMI088_H